package com.luomo.java.juc.volatiledemo;

/**
 * volatile的使用
 *
 * @author LiuMei
 * @date 2021-01-12.
 */
public class SingletonDemo {

    private static volatile SingletonDemo instance = null;

    private SingletonDemo() {
        System.out.println("构造对象");
    }

    /**
     * DCL模式（Double Check Lock双重检查）
     * <p>
     * 指令重排可能会出现问题，加入volatile禁止指令重排
     * 内存已分配（instance != null），实例还没有初始化完成
     *
     * @return
     */
    public static SingletonDemo getInstance() {
        if (instance == null) {
            synchronized (SingletonDemo.class) {
                if (instance == null) {
                    instance = new SingletonDemo();
                }
            }
        }
        return instance;
    }

    public static void main(String[] args) {

    }
}
